package com.os.service;


import com.os.pojo.virtualmemory.MemoryBlock;
import com.os.pojo.vo.ActionVo;

import java.util.List;

/**
 * 置换算法
 */
public interface SwapService<T extends MemoryBlock> {


    /**
     * 添加进入集合
     */
    void add(T item);

    /**
     * 取出能装下size,但不是同一个上级的块
     * blockClass，用来表示传入的是页还是段
     */
    T get(ActionVo actionVo);

    int len();

    /**
     * 获取置换算法名字
     */
    String getSwapName();
    void setSwapName(String name);


    /**
     * FIFO属性变化
     */
    void setFIFOIncrese(T item);

    /**
     * LRU算法属性变化
     */
    void setLRUTimeIncrese(T item);

    /**
     * clock算法访问位设置
     */
    void setClockBit(T item);

    /**
     * OPT算法，当前要访问的块列表
     */
    void setOPTList(List<T> list);
    void addToOPTList(T item);




    /**
     * 命中之后要做的事
     */
    void onFocus(T item, ActionVo actionVo);

    /**
     * 获取命中次数
     */
    int getFocusNum();

    /**
     * 总共请求次数
     */
    int getRequestNum();
    void increaseRequestNum();

    /**
     * 清空驻留集
     */
    void clearLinkedList();

}
